iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
自我挑戰組

30天Swift純Code之旅 - 鬧鐘篇系列 第 18

Swift純Code之旅 Day18. 「選取TableViewCell」

  • 分享至 

  • xImage
  •  

前言

「重複」頁面的畫面已經完成了,接著實作功能吧!
功能圖:

實作

  1. 首先建立一個變數,用來儲存Cell是否被點擊過
var isSelected: [Int] = []

2.在「RepeatAlarmViewController」的TableView didSelectRowAt()中,
新增以下程式碼,判斷該欄Cell是否有點擊過

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        // 判斷目前點擊的Cell是否有儲存於陣列中,有存在陣列中代表有點擊過
        if self.isSelected.contains(indexPath.row) {
            // 若已選擇過,則將該index移除陣列內
            self.isSelected = self.isSelected.filter{$0 != indexPath.row}
        } else {
            // 若未選擇過,則將該index加入陣列中
            self.isSelected.append(indexPath.row)
        }
        tableView.reloadRows(at: [indexPath], with: .automatic)
    }

3.在TableView的cellForRowAt中,新增以下程式碼,用來顯示已選取的Cell打勾的效果

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: RepeatAlarmTableViewCell.identifier, for: indexPath) as? RepeatAlarmTableViewCell else {  return UITableViewCell() }
        
        cell.titleLabel.text = titleDatas[indexPath.row]
        
        // 預設Cell為沒被點擊過
        cell.selectionStyle = .none
        
        // 判斷Cell是否有在陣列中,有則打勾,沒有則不打勾
        if self.isSelected.contains(indexPath.row) {
            cell.accessoryType = .checkmark
        } else {
            cell.accessoryType = .none
        }
        
        return cell
    }

現在來看一下效果

Cool~ 明天來實作將所選的資料回傳的部分


上一篇
Swift純Code之旅 Day17. 「複習 - 新增頁面、TableView、TableViewCell」
下一篇
Swift純Code之旅 Day19. 「ViewController好亂(1) - MVC介紹)」
系列文
30天Swift純Code之旅 - 鬧鐘篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言